package ar.com.sistventa.form.articulos.impl;

import java.util.ArrayList;
import java.util.List;

import javax.swing.JTable;
import javax.swing.SwingConstants;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;
import javax.swing.table.TableColumnModel;

import ar.com.sistventa.dao.ArticuloDAO;
import ar.com.sistventa.dao.impl.ArticuloDaoImpl;
import ar.com.sistventa.entities.Articulo;
import ar.com.sistventa.filtros.ArticuloFiltroBusqueda;

public class ArticulosFormImpl {
	private static int COL_ELIMINAR = 0;
	private static int COL_CODIGO = 1;
	private static int COL_ARTICULO = 2;
	private static int COL_CATEGORIA = 3;
	private static int COL_MARCA = 4;
	private static int COL_UNIDAD = 5;
	private static int COL_PROVEEDOR = 6;
	private static int COL_PRECIO = 7;
	private static int COL_STOCK = 8;
	private static int COL_MINIMO = 9;
	private ArticuloDAO articuloDAO;

	public ArticulosFormImpl() {
		articuloDAO = new ArticuloDaoImpl();
	}

	public List<Articulo> busquedaArticulos(String codigo, String descripcion,
			String categoria, String marca) {
		List<Articulo> articuloList = new ArrayList<Articulo>();
		ArticuloFiltroBusqueda articuloFiltroBusqueda = new ArticuloFiltroBusqueda();
		articuloFiltroBusqueda.setCodigo(codigo);
		articuloFiltroBusqueda.setDescripcion(descripcion);
		articuloFiltroBusqueda.setCategoria(categoria);
		articuloFiltroBusqueda.setMarca(marca);

		articuloList = articuloDAO.busquedaPorFiltro(articuloFiltroBusqueda);

		return articuloList;

	}

	public List<Articulo> todosArticulos() {
		List<Articulo> articuloList = new ArrayList<Articulo>();
		articuloList = articuloDAO.getAllArticulo();
		return articuloList;

	}

	public void eliminarArticulos(List<Articulo> articulos) {
		if (articulos != null) {
			for (Articulo articulo : articulos) {
				articuloDAO.bajaLogicaArticulo(articulo);
			}
		}
	}

	public JTable cargarTabla(JTable tbArticulos, List<Articulo> articulos) {
		// Se borra la tabla
		DefaultTableModel modeloTabla = (DefaultTableModel) tbArticulos
				.getModel();
		int filas = modeloTabla.getRowCount() - 1;
		if (filas >= 0) {
			for (int i = filas; i >= 0; i--) {
				modeloTabla.removeRow(i);
			}
		}

		// Se llena la tabla
		int fila = 0;
		for (Articulo articuloFor : articulos) {
			DefaultTableModel modelo = (DefaultTableModel) tbArticulos
					.getModel();
			modelo.addRow(new Object[1]);
			tbArticulos.setValueAt(Boolean.FALSE, fila, COL_ELIMINAR);
			tbArticulos.setValueAt(articuloFor.getCodigo(), fila, COL_CODIGO);
			tbArticulos.setValueAt(articuloFor.getDescripcion(), fila,
					COL_ARTICULO);
			if (articuloFor.getCategoria() != null) {
				tbArticulos.setValueAt(articuloFor.getCategoria()
						.getDescripcion(), fila, COL_CATEGORIA);
			}
			if (articuloFor.getMarca() != null) {
				tbArticulos.setValueAt(articuloFor.getMarca().getDescripcion(),
						fila, COL_MARCA);
			}
			if (articuloFor.getUnidad() != null) {
				tbArticulos.setValueAt(
						articuloFor.getUnidad().getDescripcion(), fila,
						COL_UNIDAD);
			}
			tbArticulos.setValueAt("", fila, COL_PROVEEDOR);
			tbArticulos.setValueAt("", fila, COL_PRECIO);
			tbArticulos.setValueAt("", fila, COL_STOCK);
			tbArticulos.setValueAt("", fila, COL_MINIMO);
			fila++;
		}
		return tbArticulos;
	}

	public JTable formatoTablaArticulos(JTable tbArticulos, int ancho) {
		DefaultTableCellRenderer tcr = new DefaultTableCellRenderer();
		tcr.setHorizontalAlignment(SwingConstants.CENTER);
		tbArticulos.getColumnModel().getColumn(1).setCellRenderer(tcr);
		tbArticulos.getColumnModel().getColumn(5).setCellRenderer(tcr);

		int anchoColumna = 0;
		TableColumnModel modeloColumna = tbArticulos.getColumnModel();
		TableColumn columnaTabla;

		for (int i = 0; i < tbArticulos.getColumnCount(); i++) {
			columnaTabla = modeloColumna.getColumn(i);
			switch (i) {
			case 0:
				anchoColumna = (8 * ancho) / 100; // Eliminar
				break;
			case 1:
				anchoColumna = (15 * ancho) / 100; // Codigo
				break;
			case 2:
				anchoColumna = (30 * ancho) / 100; // Articulo
				break;
			case 3:
				anchoColumna = (25 * ancho) / 100; // Categoria
				break;
			case 4:
				anchoColumna = (25 * ancho) / 100; // Marca
				break;
			case 5:
				anchoColumna = (15 * ancho) / 100; // Unidad
				break;
			case 6:
				anchoColumna = (30 * ancho) / 100; // Proveedor
				break;
			case 7:
				anchoColumna = (12 * ancho) / 100; // Precio Costo
				break;
			case 8:
				anchoColumna = (12 * ancho) / 100; // Stock
				break;
			case 9:
				anchoColumna = (12 * ancho) / 100; // Stock minimo
				break;
			}
			columnaTabla.setPreferredWidth(anchoColumna);
		}

		return tbArticulos;
	}

}
